import Vue from 'vue'
import Vuex from 'vuex'

Vue.use(Vuex)

const store = new Vuex.Store({
    state: {
        userId: '',
        billRecords: [],
        userInfo: null
    },
    mutations: {
        // 设置用户信息
        SET_USER_INFO(state, userInfo) {
            state.userInfo = userInfo
            // 保存用户信息到本地存储
            uni.setStorageSync('userInfo', JSON.stringify(userInfo))
        },
        // 设置用户ID
        SET_USER_ID(state, userId) {
            state.userId = userId
            // 保存用户ID到本地存储
            uni.setStorageSync('userId', userId)
        },
        // 添加新账单
        ADD_BILL(state, bill) {
            // 确保账单包含用户ID
            bill.userId = state.userId
            state.billRecords.unshift(bill)
            // 同步到本地存储，使用用户ID作为key的一部分
            uni.setStorageSync(`bills_${state.userId}`, state.billRecords)
        },
        // 从本地存储加载账单
        LOAD_BILLS(state) {
            const bills = uni.getStorageSync(`bills_${state.userId}`)
            if (bills) {
                state.billRecords = bills
            }
        },
        // 删除账单
        DELETE_BILL(state, orderNo) {
            state.billRecords = state.billRecords.filter(bill => bill.orderNo !== orderNo)
            // 同步到本地存储
            uni.setStorageSync(`bills_${state.userId}`, state.billRecords)
        },
        // 清空账单数据
        CLEAR_BILLS(state) {
            state.billRecords = []
            uni.removeStorageSync(`bills_${state.userId}`)
        },
        // 清除用户信息
        CLEAR_USER_INFO(state) {
            state.userInfo = null
            state.userId = ''
            uni.removeStorageSync('userInfo')
            uni.removeStorageSync('userId')
        }
    },
    actions: {
        // 用户登录
        login({ commit, dispatch }, userInfo) {
            // 检查是否已有用户信息
            const existingUserInfo = uni.getStorageSync('userInfo')
            const existingUserId = uni.getStorageSync('userId')
            
            if (existingUserInfo && existingUserId) {
                // 如果不是首次登录，恢复用户信息
                commit('SET_USER_INFO', JSON.parse(existingUserInfo))
                commit('SET_USER_ID', existingUserId)
                // 加载该用户的账单数据
                dispatch('loadBills')
                return JSON.parse(existingUserInfo)
            }
            
            // 首次登录，生成新的用户ID
            const userId = 'user_' + Date.now() + Math.random().toString(36).substr(2, 9)
            
            // 保存用户信息
            const fullUserInfo = {
                ...userInfo,
                id: userId,
                createTime: new Date().toISOString()
            }
            
            commit('SET_USER_INFO', fullUserInfo)
            commit('SET_USER_ID', userId)
            
            // 首次登录，清空账单数据
            commit('CLEAR_BILLS')
            
            // 返回用户信息
            return fullUserInfo
        },
        // 检查登录状态
        checkLoginStatus({ commit, dispatch }) {
            const userInfo = uni.getStorageSync('userInfo')
            const userId = uni.getStorageSync('userId')
            
            if (userInfo && userId) {
                commit('SET_USER_INFO', JSON.parse(userInfo))
                commit('SET_USER_ID', userId)
                dispatch('loadBills')
                return true
            }
            return false
        },
        // 添加新账单
        addBill({ commit }, bill) {
            commit('ADD_BILL', bill)
        },
        // 加载账单
        loadBills({ commit }) {
            commit('LOAD_BILLS')
        },
        // 删除账单
        deleteBill({ commit }, orderNo) {
            commit('DELETE_BILL', orderNo)
        },
        // 退出登录
        logout({ commit }) {
            commit('CLEAR_BILLS')
            commit('CLEAR_USER_INFO')
            uni.reLaunch({
                url: '/pages/login/login'
            })
        }
    },
    getters: {
        // 获取用户ID
        getUserId: state => state.userId,
        // 获取用户信息
        getUserInfo: state => state.userInfo,
        // 获取所有账单（只返回当前用户的账单）
        getAllBills: state => state.billRecords.filter(bill => bill.userId === state.userId),
        // 获取最近的10条记录（只返回当前用户的账单）
        getRecentBills: state => state.billRecords.filter(bill => bill.userId === state.userId).slice(0, 10)
    }
})

export default store 